package com.ruoyi.campus.service;

import java.util.List;
import com.ruoyi.campus.domain.Department;
import com.ruoyi.common.core.domain.Ztree;

/**
 * 部门信息Service接口
 * 
 * @author ruoyi
 * @date 2025-01-08
 */
public interface IDepartmentService 
{
    /**
     * 查询部门信息
     * 
     * @param deptId 部门信息主键
     * @return 部门信息
     */
    public Department selectDepartmentByDeptId(Long deptId);

    /**
     * 查询部门信息列表
     * 
     * @param department 部门信息
     * @return 部门信息集合
     */
    public List<Department> selectDepartmentList(Department department);

    /**
     * 新增部门信息
     * 
     * @param department 部门信息
     * @param operName 操作用户
     * @return 结果
     */
    public int insertDepartment(Department department, String operName);

    /**
     * 修改部门信息
     * 
     * @param department 部门信息
     * @param operName 操作用户
     * @return 结果
     */
    public int updateDepartment(Department department, String operName);

    /**
     * 批量删除部门信息
     * 
     * @param deptIds 需要删除的部门信息主键集合
     * @return 结果
     */
    public int deleteDepartmentByDeptIds(Long[] deptIds);

    /**
     * 删除部门信息信息
     * 
     * @param deptId 部门信息主键
     * @return 结果
     */
    public int deleteDepartmentByDeptId(Long deptId);

    /**
     * 查询部门管理树列表
     * 
     * @param department 部门信息
     * @return 所有部门信息
     */
    public List<Ztree> selectDepartmentTree(Department department);

    /**
     * 构建前端所需要树结构
     *
     * @param departments 部门列表
     * @return 树结构列表
     */
    public List<Department> buildDeptTree(List<Department> departments);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param departments 部门列表
     * @return 下拉树结构列表
     */
    public List<Ztree> buildDeptTreeSelect(List<Department> departments);

    /**
     * 根据部门ID查询信息
     *
     * @param deptId 部门ID
     * @return 部门信息
     */
    public Department selectDeptById(Long deptId);

    /**
     * 根据ID查询所有子部门（正常状态）
     *
     * @param deptId 部门ID
     * @return 子部门数
     */
    public int selectNormalChildrenDeptById(Long deptId);

    /**
     * 是否存在部门子节点
     *
     * @param deptId 部门ID
     * @return 结果
     */
    public boolean hasChildByDeptId(Long deptId);

    /**
     * 查询部门是否存在用户
     *
     * @param deptId 部门ID
     * @return 结果 true 存在 false 不存在
     */
    public boolean checkDeptExistUser(Long deptId);

    /**
     * 校验部门名称是否唯一
     *
     * @param department 部门信息
     * @return 结果
     */
    public boolean checkDeptNameUnique(Department department);

    /**
     * 校验部门编码是否唯一
     *
     * @param department 部门信息
     * @return 结果
     */
    public boolean checkDeptCodeUnique(Department department);

    /**
     * 批量删除部门信息
     *
     * @param ids 需要删除的部门信息主键集合字符串
     * @return 结果
     */
    public int deleteDepartmentByDeptIds(String ids);

    /**
     * 获取部门点位数量统计
     *
     * @param deptId 部门ID
     * @return 点位数量
     */
    public int getPointCountByDeptId(Long deptId);

}